package com.Questions.BinarySearch;


/**
 * 正整数和负整数的最大计数
 */
public class leetcode2529 {
    public int maximumCount(int[] nums) {
        int pos1 = lowerBound(nums, 0);
        int pos2 = lowerBound(nums, 1);
        return Math.max(pos1, nums.length - pos2);
    }

    /**
     * 使用二分查找 找到第一个数值大于等于0 的下标 找到第一个数值大于等于1 的下标
     * @param nums
     * @param val
     * @return
     */
    public int lowerBound(int[] nums, int val) {
        int l = 0, r = nums.length;
        while (l < r) {
            int m = (l + r) / 2;
            if (nums[m] >= val) {
                r = m;
            } else {
                l = m + 1;
            }
        }
        return l;
    }
}
